1.67

 

题目

Let the rotational closure of language A be

RC(A)={yxxyA}.

a. Show that for any language A, we have RC(A)=RC(RC(A)).
b. Show that the class of regular languages is closed under rotational closure.


思路

点击展开

a. 展开集合 RC(RC(A)) 的定义,画出图形示意,结论显然
b. 要判断字符串是否可以围绕某个分割点前后置换,变成 L(A) ,这是个多选择过程,考虑构造 NFA,不同分割点的选择对应不同 ε 转移


解答

点击展开

a.

RC(RC(A))={xx=mn,nm=pq,qpA}

不妨设 pq 分割点在 nm 分割点右侧,即 |p|>|n| ,两个切割点将 nm 分为三段:

n,(mp),q

那么

qp=qn(mp)Ax=mn=(mp)qnRC(A)

所以 RC(RC(A))RC(A),显然有 RC(A)RC(RC(A)) ,故 RC(RC(A))=RC(A)

b.
设 A 对应的 DFA 为 M,有 k 个节点,那么把 DFA 复制为 2k 份,两两配对
这里假设 k=3q3 是 M 的接受节点,q1 是 M 的起始节点

NFAcluster_upper1cluster_upper2cluster_upper3cluster_lower1cluster_lower2cluster_lower3U1_q2q₂U1_q3q₃U1_q1q₁U1_q1->U1_q2U1_q1->U1_q3U2_q1q₁L1_q1q₁U2_q2q₂U2_q3q₃U2_q1->U2_q2U2_q1->U2_q3U3_q1q₁L2_q1q₁U3_q2q₂U3_q3q₃U3_q1->U3_q2U3_q1->U3_q3L3_q1q₁L1_q2q₂L1_q3q₃L1_q3->U1_q1εL1_q1->L1_q2L1_q1->L1_q3L2_q2q₂L2_q3q₃L2_q3->U2_q1εL2_q1->L2_q2L2_q1->L2_q3L3_q2q₂L3_q3q₃L3_q3->U3_q1εL3_q1->L3_q2L3_q1->L3_q3start1start1->L1_q1start2start2->L2_q2start3start3->L3_q3
三个子图共同构成了最终的 NFA,每个子图代表不同旋转分割点的选择。
输入 ω=yx ,先在前半个子图中识别 yy 需要从分割点移动到 M 的接受状态;再经过 ε 转移到后半个子图识别 xx 需要从 M 的起始状态移动到分割点。存在这样的路径等价于 xy 能从 M 的起始状态移动到 M 的接受状态,即 xyAω=yxRC(A)